python3小白课:for表达式

for表达式基本使用

for表达式通常用于使用区间、元组、列表等可迭代对象来创建新的列表,在实战中的某些场景偶尔会用到,如果掌握比较困难,也可以不学这个。for表达式的语法如下:

[表达式 for 循环变量 in 可迭代对象]

for表达式只有一行,跟一般的循环结构是有点区别的,我们对比一下,它将表达式放到了for的前面,表达式部分就是我们之前讲for-in循环时的执行体部分,然后我们还注意到,外面增加了一个[],表示将生成的结果生成一个列表来包裹起来,最终返回一个列表,所以有时候我们也称之为列表推导式。

我们来看个小例子:

# coding:utf-8
a = range(5)
# 我们来获取一下a这个列表每个元素的平方的新列表
b = [x * x for x in a]
print(b)
# 我们还能添加if条件在后面,满足条件元素为偶数的才计算
b = [x * x for x in a if x % 2 == 0]
print(b)

[!question]

有的同学会想,如果我们将表达式的[]换成()是否可以呢?将列表换成元组,会生成一个元组吗?

我们来看一下。

# coding:utf-8
a = range(5)
b = (x * x for x in a)
print(b)
print(type(b))

我们会发现,返回的是一个generator对象,这个对象是一个生成器,是可以迭代的,我们可以使用for-in循环迭代。

# coding:utf-8
a = range(5)
b = (x * x for x in a)
for i in b:
    print(i)

for表达式支持嵌套

for表达式也支持嵌套,两层或者三层的循环嵌套也是可以的,当然如果有if条件的需要也可以加上。

# coding:utf-8
# 我们拿稍微简单一点的两层循环嵌套来说明写法
a = [(x, y) for x in range(5) for y in range(3) if x > y]
print(a)
# 上述写法跟这样的写法是一样的:
a = []
for x in range(5):
    for y in range(3):
        if x > y:
            a.append((x, y))
print(a)

看,是不是方便许多?


zip压缩函数

这里我们小小的介绍一个有用的函数zip压缩函数。它可不是我们日常理解的一种压缩文件命令,而是可以将几个列表压缩成一个zip对象(可迭代对象),这样可以使用循环来并行遍历两个列表了。

我们来看个小小的例子:

# coding:utf-8
a = ['a', 'b', 'c']
b = [4, 5, 6]
c = [x for x in zip(a, b)]
print(c)

可以看到,我们将两个列表压缩成了多个元组组合,最后再生成个列表,就是一个列表了。

如果两个列表成员数不一致会怎么样呢?

# coding:utf-8
a = ['a', 'b', 'c']
b = [4, 5]
c = [x for x in zip(a, b)]
print(c)

可以看到效果是以短的列表为准来进行压缩。

这个函数大家知道一下即可。

单词释义

单词 释义
zip 压缩
Copyright © 雪山凌狐教程 all right reserved,powered by Gitbook该文件修订时间: 2020-04-11 17:14:54

results matching ""

    No results matching ""